package br.unisul.prolinear.view;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import javax.faces.event.SystemEvent;
import javax.faces.model.ListDataModel;

import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

import br.unisul.prolinear.controller.CadastroController;
import br.unisul.prolinear.controller.DocumentoController;
import br.unisul.prolinear.controller.SystemController;
import br.unisul.prolinear.model.Documento;
import br.unisul.prolinear.utils.Util;

@ManagedBean
@ViewScoped
public class HomeBean extends Bean implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private DocumentoDataModel documentos;
	private Documento[] documentosSelecionados;
	private String emailCompartilhamento;
	private Integer tipo;
	private boolean permiteEscrita;
	private boolean publico;
	private boolean permiteEscritaDisabled;
	private boolean editDisabled;
	private boolean disabled ;
	private boolean emailDisabled;
	private DocumentoController documentoController;
	private CadastroController cadastroController;

	public HomeBean() {
		super();
		documentoController = new DocumentoController();
		cadastroController = new CadastroController();
		disabled = true;
		editDisabled = true;
		emailDisabled = true;	
		atualizaListDocumentos();

	}	

	public void onRowSelect(SelectEvent event) {
		atualizaEnabled();
	}
	public void onRowUnselect(UnselectEvent event){
		atualizaEnabled();
	}

	public void compartilha(ActionEvent actionEvent){
		documentoController.compartilhaDocumento(documentosSelecionados, emailCompartilhamento, publico);
	}


	public void checkBoxChange(){
		permiteEscritaDisabled = publico;
		if(publico){
			permiteEscrita = false;
		}
	}

	public void alteraCadastro(ActionEvent actionEvent){
		Util.redirect("../cadastro.jsf?id="+usuario.getId());
	}


	public void atualizaEnabled(){
		editDisabled = documentosSelecionados.length != 1;
		disabled = documentosSelecionados.length == 0;
		emailDisabled = disabled ||  aluno == null || aluno.getEmailProfessor().isEmpty();
	}

	public void atualiza(SystemEvent event){
		atualizaListDocumentos();
	}

	public void excluiDocumentos(ActionEvent action){
		documentoController.excluiDocumentos(documentosSelecionados);	
		atualizaListDocumentos();
	}

	public void enviaDocumento(ActionEvent actionEvent){
		documentoController.enviaDocumentos(documentosSelecionados);
	}

	public void edita(ActionEvent actionEvent){
		documentoController.editaDocumento(documentosSelecionados[0]);
	}


	private void atualizaListDocumentos(){		
		documentos = new DocumentoDataModel(documentoController.listaDocumentos(Util.getParametro("tipo")));
	}
	
	public void desativarConta(ActionEvent actionEvent){
		cadastroController.desativaUsuario(usuario);
		SystemController.logout();
	}

	public ListDataModel<Documento> getDocumentos(){		
		return documentos;
	}


	public void setDocumentos(DocumentoDataModel documentos) {
		this.documentos = documentos;
	}


	public Documento[] getDocumentosSelecionados() {
		return documentosSelecionados;
	}



	public void setDocumentosSelecionados(Documento[] documentosSelecionados) {
		this.documentosSelecionados = documentosSelecionados;
	}



	public boolean isDisabled() {
		return disabled;
	}



	public void setDisabled(boolean menuRendered) {
		this.disabled = menuRendered;
	}


	public Integer getTipo() {
		return tipo;
	}


	public void setTipo(Integer tipo) {
		this.tipo = tipo;
	}


	public String getEmailCompartilhamento() {
		return emailCompartilhamento;
	}


	public void setEmailCompartilhamento(String emailCompartilhamento) {
		this.emailCompartilhamento = emailCompartilhamento;
	}


	public boolean isPermiteEscrita() {
		return permiteEscrita;
	}


	public void setPermiteEscrita(boolean permiteEscrita) {
		this.permiteEscrita = permiteEscrita;
	}


	public boolean isPublico() {
		return publico;
	}


	public void setPublico(boolean publico) {
		this.publico = publico;
	}


	public boolean isEditDisabled() {
		return editDisabled;
	}


	public void setEditDisabled(boolean editDisabled) {
		this.editDisabled = editDisabled;
	}

	public boolean isPermiteEscritaDisabled() {
		return permiteEscritaDisabled;
	}


	public void setPermiteEscritaDisabled(boolean permiteEscritaDisabled) {
		this.permiteEscritaDisabled = permiteEscritaDisabled;
	}


	public boolean isEmailDisabled() {
		return emailDisabled;
	}


	public void setEmailDisabled(boolean emailDisabled) {
		this.emailDisabled = emailDisabled;
	}


}
